﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Inventario_HardSoft.ADO;
using System.Windows.Forms;

namespace Inventario_HardSoft.Controlador
{
    class Ctrl_Empr_Nombr
    {
        ConexionDataContext conexion;
        Contador conta;

        public Ctrl_Empr_Nombr()
        {
            conexion =new ConexionDataContext();
        }

        internal List<EMPRESA> getList_empresaNombr()
        {
            List<EMPRESA> list_Emp_Nomb = new List<EMPRESA>();            
            list_Emp_Nomb = conexion.EMPRESA.Where(x => x.ELIMINADO == 0).OrderBy(x=>x.NOMBREEMPRESA).ToList<EMPRESA>();
            return list_Emp_Nomb;
        }
 
        internal DialogResult regEmpresa(EMPRESA p)
        {  
            DialogResult result = DialogResult.Cancel;
            if (!this.verificar_NombreEmpresa(p.NOMBREEMPRESA))  
            {
                int idemp = Convert.ToInt32(conexion.INVENTARIO_CONTADOR.Single(x => x.IDENTIFICADOR == "HARDSOFT").CONT_IDEMPRESA);
                String numero = Convert.ToString(idemp);
                String numero2 = numero.Trim().PadLeft(3, '0');
                String idprograma = "EMP_" + numero2;
                //insertamos en la base de datos             
                EMPRESA emp = new EMPRESA()
                {
                    IDEMPRESA  = idprograma,
                    NOMBREEMPRESA = p.NOMBREEMPRESA,                 
                    ELIMINADO = p.ELIMINADO,
                };
                conexion.EMPRESA.InsertOnSubmit(emp);
                conexion.SubmitChanges();
                conexion.increm_ContadorIdEmpresa();
                result = DialogResult.OK;
            }
            else
            {
                result = DialogResult.Cancel;
            }
            return result;
        }


        private bool verificar_NombreEmpresa(string nombEmpresa)
        {
            bool value = conexion.EMPRESA.Select(x => x.NOMBREEMPRESA).Contains(nombEmpresa);
            return value;
        }
         

        internal DialogResult regSucursal(Sucursal s)
        {
            DialogResult result = DialogResult.Cancel;
            if (!this.verificar_NombreCiudad(s.ciudad))
            {
                int idciu = Convert.ToInt32(conexion.INVENTARIO_CONTADOR.Single(x => x.IDENTIFICADOR == "HARDSOFT").CONT_IDSUCURSAL);
                String numero3 = Convert.ToString(idciu);
                String numero4 = numero3.Trim().PadLeft(5, '0');
                String idsucursal = "SUCR_" + numero4;
                //insertamos en la base de datos             
                SUCURSAL suc = new SUCURSAL()
                {
                    IDSUCURSAL = idsucursal,
                    CIUDAD = s.ciudad,
                    ELIMINADO = s.eliminado,
                };
                conexion.SUCURSAL.InsertOnSubmit(suc);
                conexion.SubmitChanges();
                conexion.increm_ContadorIdSucursal();
                result = DialogResult.OK;
            }
            else
            {
                result = DialogResult.Cancel;
            }
            return result; 
        }

        private bool verificar_NombreCiudad(string nombCiudad)
        { 
            bool value = conexion.SUCURSAL.Select(x => x.CIUDAD).Contains(nombCiudad);
            return value; 
        }

        internal List<SUCURSAL> getList_Sucursales()
        {
            List<SUCURSAL> list_Sucursales= new List<SUCURSAL>();
            var query = from rep in conexion.SUCURSAL
                        where (rep.ELIMINADO == 0)
                        select rep;
            list_Sucursales = query.ToList<SUCURSAL>();
            return list_Sucursales;
        }

        internal void getList_Empresa(DataGridView dg)
        {
            List<EMPRESA> lisemp = conexion.EMPRESA.Where(x => x.ELIMINADO == 0).OrderBy(emopr => emopr.NOMBREEMPRESA).ToList<EMPRESA>();
            int i = 1;
            foreach (EMPRESA p in lisemp)
            {
                object[] obj = new object[] { i.ToString(),p.IDEMPRESA, p.NOMBREEMPRESA};              
                dg.Rows.Add(obj);
                i++;
            } 
        }

        internal List<EMPRESA> getList_Empresa()
        {
            return conexion.EMPRESA.Where(x => x.ELIMINADO == 0).OrderBy(emopr => emopr.NOMBREEMPRESA).ToList<EMPRESA>();
        }
          
        internal DialogResult capturaIdEmpresa(DataGridView grid_SucursalesAsignadas, string p)
        { 
            string idEmpresa = conexion.EMPRESA.Single(x => x.NOMBREEMPRESA == p).IDEMPRESA; 

            DialogResult dr = DialogResult.Cancel;
            EMPRESAXSUCURSAL empxsuc;
            try
            {
                foreach (DataGridViewRow row in grid_SucursalesAsignadas.Rows)
                {
                    empxsuc = new EMPRESAXSUCURSAL();
                    empxsuc.IDEMPRESA = idEmpresa;
                    empxsuc.IDSUCURSAL = row.Cells["idSucursal2"].Value.ToString();
                    conexion.EMPRESAXSUCURSAL.InsertOnSubmit(empxsuc);
                }
                conexion.SubmitChanges();
                dr = DialogResult.OK;
            }
            catch (Exception)
            {
                dr = DialogResult.Cancel;
            }
            return dr; 
        } 
    }
}
